package com.gams.common;

import lombok.extern.log4j.Log4j;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

@Log4j
public class HttpRequestUtils
{
    // get请求
    // 实际的请求头设置还不完善，以后再补充
    public static void httpGet() throws IOException
    {
        HttpClient client = new HttpClient();
        GetMethod getMethod = new GetMethod("http://。。。");
        int i = client.executeMethod(getMethod);
        System.out.println(new String(getMethod.getResponseBody()));
    }

    // 向第三方接口发送一个post 请求的参数的看具体的要求，该接口想要的数据是什么类型，如果是json，那就把参数转换为json类型，其他的转换为其它类型，如阿里的接口参数就有的不是json类型
    public static void httpPost(String url, String jsonParam)
    {
        try
        {
            // 服务端通常是根据请求头（headers）中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码，再对主体进行解析。所以说到 POST 提交数据方案，包含了 Content-Type 和消息主体编码方式两部分
            HttpClient client = new HttpClient(); // 客户端实例化
            PostMethod postMethod = new PostMethod(url); // 请求方法post，可以将请求路径传入构造参数中
            postMethod.addRequestHeader("Content-type", "application/json; charset=utf-8");

            byte[] requestBytes = jsonParam.getBytes(StandardCharsets.UTF_8); // 将参数转为二进制流
            InputStream inputStream = new ByteArrayInputStream(requestBytes, 0,
                    requestBytes.length);
            RequestEntity requestEntity = new InputStreamRequestEntity(inputStream,
                    requestBytes.length, "application/json; charset=utf-8"); // 请求体
            postMethod.setRequestEntity(requestEntity);   // 将参数放入请求体

            int i = client.executeMethod(postMethod);  // 执行方法
            log.debug("请求状态：" + i);
            // 这里因该有判断的，根据请求状态判断请求是否成功，然后根据第三方接口返回的数据格式，解析出我们需要的数据

            byte[] responseBody = postMethod.getResponseBody(); // 得到相应数据
            String s = new String(responseBody);
            log.debug("请求响应：" + s);
        } catch (IOException e)
        {
            e.printStackTrace();
        }

    }
}

